home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / bin / rpm2targz < prev    next >
Text File  |  2005-10-18  |  5KB  |  129 lines

  1. #!/bin/sh
  2. # Copyright 1997, 1998 Patrick Volkerding, Moorhead, MN USA
  3. # Copyright 2002 Slackware Linux, Inc., Concord, CA USA
  4. # All rights reserved.
  5. # $Header: /var/cvsroot/gentoo-x86/app-arch/rpm2targz/files/rpm2targz-9.0-secure_temp_handling.patch,v 1.1 2005/06/25 12:40:21 liquidx Exp $
  6. #
  7. # Redistribution and use of this script, with or without modification, is
  8. # permitted provided that the following conditions are met:
  9. #
  10. # 1. Redistributions of this script must retain the above copyright
  11. #    notice, this list of conditions and the following disclaimer.
  12. #
  13. #  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
  14. #  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  15. #  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
  16. #  EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  17. #  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  18. #  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
  19. #  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  20. #  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
  21. #  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
  22. #  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  23. #
  24.  
  25. # debug switch to allow to bypass use of rpm2cpio provided by the rpm package
  26. USERPM2CPIO=true
  27. [ "$TMPDIR" == "" ] && TMPDIR=/tmp
  28. if [ ! -d "$TMPDIR" ]; then
  29.     echo "TMPDIR=$TMPDIR is not a dir" > /dev/stderr
  30.     exit 1
  31. fi
  32. WORKDIR=`mktemp -d $TMPDIR/$$XXXXXX`
  33. if [ $? != 0 ]; then
  34.     echo "Failed to make tmp workdir for file i/o conversion" > /dev/stderr
  35.     exit 1
  36. fi
  37.  
  38. if [ "$1" = "" ]; then
  39.   echo "$0:  Converts RPM format to standard GNU tar + GNU zip format."
  40.   if [ -e /etc/slackware-version ]; then
  41.     echo "            (view converted packages with \"less\", install and remove"
  42.     echo "            with \"installpkg\", \"removepkg\", \"pkgtool\", or manually"
  43.     echo "            with \"tar\")"
  44.   fi
  45.   echo
  46.   echo "Usage:      $0 <file.rpm>"
  47.   if [ "`basename $0`" = "rpm2tgz" ]; then
  48.     echo "            (Outputs \"file.tgz\")"
  49.   else
  50.     echo "            (Outputs \"file.tar.gz\")"
  51.   fi
  52.   exit 1;
  53. fi
  54. for i in $* ; do
  55.   if [ ! "$1" = "$*" ]; then
  56.     echo "Processing file: $i"
  57.   fi
  58.   rm -rf ${WORKDIR}/* || exit 1 ; # clear the way, just in case of mischief
  59.  
  60.   # Determine if this is a source or binary RPM.
  61.   # If we have getrpmtype, use that.  Otherwise, try "file".
  62.   if type -p getrpmtype 1> /dev/null 2> /dev/null; then
  63.     if getrpmtype -n $i | grep source 1> /dev/null 2> /dev/null ; then
  64.       isSource=1
  65.     else
  66.       isSource=0
  67.     fi
  68.   else # use file.  This works fine on Slackware, and is the default.
  69.     if file $i | grep RPM | grep " src " 1> /dev/null 2> /dev/null ; then
  70.       isSource=1
  71.     else
  72.       isSource=0
  73.     fi
  74.   fi
  75.  
  76.   ofn=${WORKDIR}/`basename $i .rpm`.cpio
  77.   if $USERPM2CPIO && which rpm2cpio 1> /dev/null 2> /dev/null ; then
  78.     rpm2cpio $i > $ofn 2> /dev/null
  79.     if [ ! $? = 0 ]; then
  80.       echo "... rpm2cpio failed.  (maybe $i is not an RPM?)"
  81.       ( rm -rf "${WORKDIR}/*" )
  82.       continue
  83.     fi
  84.   else # less reliable than rpm2cpio...
  85.     # get offset of start of payload
  86.     PAYLOADOFFSET=`rpmoffset < $i` 
  87.     #identify compression
  88.     PAYLOADHEAD=`dd ibs=${PAYLOADOFFSET} skip=1 if=$i 2> /dev/null | dd bs=10 count=1 2> /dev/null`
  89.     if echo ${PAYLOADHEAD} | grep -e $'^\037\213' > /dev/null ; then 
  90.        echo "found gzip magic bytes"
  91.     decomp="gzip"
  92.     elif echo ${PAYLOADHEAD} | grep -e "^BZh" > /dev/null ; then
  93.         echo "found bzip magic bytes"
  94.     decomp="bzip2"
  95.     else
  96.         echo  " $i - no magic compression identifier found - skipping file"
  97.         ( rm -rf "${WORKDIR}/*" )
  98.         continue
  99.     fi
  100.     echo -n "  trying to decompress with ${decomp}..."
  101.     dd ibs=`rpmoffset < $i` skip=1 if=$i 2> /dev/null | ${decomp} -dc > $ofn 2> /dev/null 
  102.     if [ $? = 0 ]; then
  103.       echo "  OK"
  104.     else
  105.       echo "  FAILED"
  106.       echo  " $i  failed to decompress - skipping file"
  107.       ( rm -rf "${WORKDIR}/*" )
  108.       continue
  109.     fi
  110.   fi
  111.   DEST=${WORKDIR}
  112.   #if [ "$isSource" = "1" ]; then
  113.   #   DEST=$DEST/$(basename $(basename $i .rpm) .src)
  114.   #fi
  115.   mkdir -p $DEST
  116.   ( cd $DEST
  117.     cpio --extract --preserve-modification-time --make-directories < $ofn 1> /dev/null 2> /dev/null
  118.     rm -f $ofn
  119.     find . -type d -perm 700 -exec chmod 755 {} \; )
  120.   ( cd ${WORKDIR} ; tar cf - . ) > `basename $i .rpm`.tar
  121.   gzip -9 `basename $i .rpm`.tar
  122.   if [ "`basename $0`" = "rpm2tgz" ]; then
  123.     mv `basename $i .rpm`.tar.gz `basename $i .rpm`.tgz
  124.   fi
  125.   ( rm -rf "${WORKDIR}/*" )
  126.   echo
  127. done
  128. rm -rf ${WORKDIR}
  129.